//
//  232. 用栈实现队列.swift
//  LeetCodeTrain
//
//  Created by rjb on 2021/7/7.
//  Copyright © 2021 rjb. All rights reserved.
//

import Foundation
// 用栈实现队列
// 整个的思路 两个栈，
// 入队：放入未放数据的栈，
// 出队：将一个栈的数据移动另一个栈，并取出最后的一个数据
class MyQueue {
    var stack1: [Int] = []
    var stack2: [Int] = []
    
    func push(_ x: Int) {
        stack1.append(x)
    }
    func pop() -> Int? {
        if stack2.isEmpty {
            for item in stack1.reversed() {
                stack2.append(item)
            }
        }
        return stack2.removeLast()
    }
    // 返回队列首部元素
    func peek() -> Int? {
        guard let last = pop() else {
            return nil
        }
        stack2.append(last)
        return last
    }
    func empty() -> Bool {
        return stack1.isEmpty
    }
}
class CQueue {
    var stack1: [Int] = []
    var stack2: [Int] = []
    init() {
        
    }
    func appendTail(_ value: Int) {
        stack1.append(value)
    }
    func deleteHead() -> Int {
        // 只有在stack2 为空时，才进行转移
        if stack2.isEmpty {
            while !stack1.isEmpty {
                let item = stack1.removeLast()
                stack2.append(item)
            }
        }
        if stack2.isEmpty {
            return -1
        } else {
            return stack2.removeLast()
        }
    }
}

class Solution232 {
    static func test() {
        let nums = [4,3,2,7,8,2,3,1]
        let solution = MyQueue()
    }
}
